package com.yunke.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunke.entity.YunkeOperateLog;
import com.yunke.entity.vo.YunkeOperateLogVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 操作日志Mapper接口
 * 
 * @author yunke
 * @since 1.0.0
 */
@Mapper
public interface YunkeOperateLogMapper extends BaseMapper<YunkeOperateLog> {

    /**
     * 分页查询操作日志
     */
    IPage<YunkeOperateLogVo> selectLogPageVo(Page<YunkeOperateLogVo> page,
                                            @Param("operatorName") String operatorName,
                                            @Param("module") String module,
                                            @Param("operateType") Integer operateType,
                                            @Param("operateStatus") Integer operateStatus,
                                            @Param("startTime") Long startTime,
                                            @Param("endTime") Long endTime);

    /**
     * 根据ID查询操作日志详情
     */
    YunkeOperateLogVo selectLogVoById(@Param("id") Long id);

    /**
     * 统计操作日志数量
     */
    Long countLogs(@Param("operateStatus") Integer operateStatus,
                   @Param("startTime") Long startTime,
                   @Param("endTime") Long endTime);

    /**
     * 统计各模块操作次数
     */
    List<Map<String, Object>> countByModule(@Param("startTime") Long startTime,
                                           @Param("endTime") Long endTime);

    /**
     * 统计各操作类型次数
     */
    List<Map<String, Object>> countByOperateType(@Param("startTime") Long startTime,
                                                @Param("endTime") Long endTime);

    /**
     * 统计操作状态分布
     */
    List<Map<String, Object>> countByOperateStatus(@Param("startTime") Long startTime,
                                                  @Param("endTime") Long endTime);

    /**
     * 统计每日操作次数
     */
    List<Map<String, Object>> countByDate(@Param("startTime") Long startTime,
                                         @Param("endTime") Long endTime);

    /**
     * 查询最活跃的操作员
     */
    List<Map<String, Object>> selectTopOperators(@Param("startTime") Long startTime,
                                                @Param("endTime") Long endTime,
                                                @Param("limit") Integer limit);

    /**
     * 查询操作最频繁的模块
     */
    List<Map<String, Object>> selectTopModules(@Param("startTime") Long startTime,
                                              @Param("endTime") Long endTime,
                                              @Param("limit") Integer limit);

    /**
     * 删除指定时间之前的日志
     */
    int deleteByTime(@Param("beforeTime") Long beforeTime);

    /**
     * 批量删除日志
     */
    int batchDelete(@Param("ids") List<Long> ids);

    /**
     * 清空操作日志
     */
    int clearLogs();
} 